// 接口 interface 
/**
 *  1.对对象形状进行描述
 *  2.对类的一部分行为抽象
 */

// 对象
interface Person {
    readonly id: number
    name: string
    age: number
    sex?: string   // 可选属性
    [propName: string]: any  // 任意属性，但只能是any类型
}
let person: Person = {
    id: 1,
    name: '西游',
    age: 18,
    skill: '跑步'
}
// 报错，id经过raadonly修饰后，只读，不可修改
// person.id = 2
// skill被定义成任意属性，没有智能提示
console.log(person.skill);

// 数组
interface List {
    [index: number]: string | number
}
let list: List = [1, 2, '2']

// 类数组
interface Args {
    [index: number]: string
    length: number
}
function showArgs() {
    let args: Args = arguments
}

// 函数
interface FullName {
    (firstName: string, lastName?: string, ...args: string[]): string
}
let showFullName: FullName = function (firstName, lastName, ...args) {
    return firstName + '_' + lastName + args[0]
}
console.log(showFullName('白', '居易', ',剩余参数'));

